package com.yunpeng.aidevice.dao.mapper.relation;

import com.yunpeng.aidevice.dao.mapper.IRelationMapper;
import com.yunpeng.aidevice.dao.model.relation.RolePermissionDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 角色权限配置 Mapper 接口
 * </p>
 *
 * @author hemw
 * @since 2020-04-07
 */
@Mapper
public interface RolePermissionMapper extends IRelationMapper<RolePermissionDO> {

    /**
     * 查询一些角色代码的权限代码集合
     *
     * @param roleCodes 角色代码列表
     * @return
     */
    List<String> queryRoleListPermissions(@Param(value = "roleCodes") List<String> roleCodes);

    /**
     * 根据组角色代码查询对应关联列表
     *
     * @param roleCode
     * @return
     */
    List<RolePermissionDO> queryListByOrganization(@Param(value = "roleCode") String roleCode);

    /**
     * 根据角色代码查询对应关联列表
     *
     * @param roleCode
     * @return
     */
    List<RolePermissionDO> queryListByRole(@Param(value = "roleCode") String roleCode);

    /**
     * 根据权限代码查询对应关联列表
     *
     * @param permissionCode
     * @return
     */
    List<RolePermissionDO> queryListByPermission(@Param(value = "permissionCode") String permissionCode);

    /**
     * 根据角色代码或权限代码（必须有一个不为空）查询存在数量
     *
     * @param permissionCode
     * @param roleCode
     * @return
     */
    Integer existsCount(@Param(value = "permissionCode") String permissionCode, @Param(value = "roleCode") String roleCode);

    /**
     * 根据角色代码删除角色权限关联关系
     *
     * @param roleCode 角色代码
     */
    void deleteByRoleCode(@Param(value = "roleCode") String roleCode);

    /**
     * 清理角色权限关联关系
     *
     * @param roleCode       角色代码
     * @param permissionCode 权限代码
     */
    void deleteByRoleAndPermission(@Param(value = "roleCode") String roleCode, @Param(value = "permissionCode") String permissionCode);
}
